package com.xfusion.chatglm.data.trigger.mq;


import com.google.common.eventbus.Subscribe;
import com.xfusion.chatglm.data.domain.order.service.IOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @description 订单支付成功监听
 * 1. 订单支付成功回调，最好是快速变更订单状态，避免超时重试次数上限后不能做业务。所以推送出MQ消息来做【发货】流程
 */
@Slf4j
@Component
public class OrderPaySuccessListener {

    @Resource
    private IOrderService orderService;

    /**
     * 这里的OrderPaySuccessListener，已经被注册到消息总线上，eventBus发布消息后，会自动调用handleEvent方法，
     * 当然，eventBus传入的参数要和这个方法对应，是String类型的。
     * OrderReplenishmentJob类中发布的消息就是被这里接收
     * @param orderId 需要发货的订单号
     */
    @Subscribe
    public void handleEvent(String orderId) {
        try {
            log.info("支付完成，发货并记录，开始。订单：{}", orderId);
            orderService.deliverGoods(orderId);
        } catch (Exception e) {
            log.error("支付完成，发货并记录，失败。订单：{}", orderId, e);
        }
    }

}
